package com.icen.utils.comm;

import java.io.Serializable;
import java.util.Map;
import java.util.Map.Entry;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;

/**
 * Intent Utils Class
 * 
 * @author IcenHan
 * 
 */
public class IntentUtils {
	/**
	 * 使用Intent跳转到另一个Activity
	 * 
	 * @param context
	 *            上下文
	 * @param className
	 *            目标Activity类名
	 */
	public static void intentToAct(Context context, Class<?> className) {
		context.startActivity(new Intent(context, className));
	}

	/**
	 * 使用Intent跳转到另一个Activity,并传递一个参数
	 * 
	 * @param context
	 *            上下文
	 * @param className
	 *            需要打开的目标Activity类
	 * @param paramsName
	 *            参数名
	 * @param paramsValue
	 *            参数值
	 */
	public static void intentToAct(Context context, Class<?> className,
			String paramsName, String paramsValue) {
		Intent intent = new Intent(context, className);
		Bundle bundle = new Bundle();
		bundle.putString(paramsName, paramsValue);
		intent.putExtras(bundle);
		context.startActivity(intent);
	}

	/**
	 * 使用Intent跳转到另一个Activity,并传递多个参数
	 * 
	 * @param context
	 *            上下文
	 * @param className
	 *            需要打开的目标Activity类
	 * @param paramsMap
	 *            需要传递的参数的键值对集合
	 */
	public static void intentToAct(Context context, Class<?> className,
			Map<String, String> paramsMap) {
		Intent intent = new Intent(context, className);
		Bundle bundle = new Bundle();
		for (Entry<String, String> entry : paramsMap.entrySet()) {
			bundle.putString(entry.getKey(), entry.getValue());
		}
		intent.putExtras(bundle);
		context.startActivity(intent);
	}

	/**
	 * 使用Intent跳转到指定的网站
	 * 
	 * @param ctx
	 * @param url
	 */
	public static void intentToWeb(Context ctx, String url) {
		Uri uri = Uri.parse(url);
		Intent intent = new Intent(Intent.ACTION_VIEW, uri);
		ctx.startActivity(intent);
	}

	public static void intentToActByObj(Context context, Class<?> className,
			String objName, Serializable serObj) {
		Intent intent = new Intent();
		intent.setClass(context, className);
		Bundle bundle = new Bundle();
		bundle.putSerializable(objName, serObj);
		intent.putExtras(bundle);
		context.startActivity(intent);
	}

	public static void intentToActByObj(Context context, Class<?> className,
			Map<String, Serializable> objMap) {
		Intent intent = new Intent();
		intent.setClass(context, className);
		Bundle bundle = new Bundle();
		for (Entry<String, Serializable> entry : objMap.entrySet()) {
			bundle.putSerializable(entry.getKey(), entry.getValue());
		}
		intent.putExtras(bundle);
		context.startActivity(intent);
	}

	@SuppressWarnings("unchecked")
	public static <T> T getBundleValueByObj(Activity activity, String objName,
			Class<T> obj) {
		T temp = (T) activity.getIntent().getExtras().getSerializable(objName);
		return temp;
	}

	public static String getBundleValueByStr(Activity activity,
			String paramsName) {
		return activity.getIntent().getStringExtra(paramsName);
	}

	public static int getBundleValueByInt(Activity activity, String paramsName) {
		return activity.getIntent().getIntExtra(paramsName, -1);
	}

	public static int getBundleValueByInt(Activity activity, String paramsName,
			int defaultValue) {
		return activity.getIntent().getIntExtra(paramsName, defaultValue);
	}

	public static boolean getBundleValueByBoolean(Activity activity,
			String paramsName) {
		return activity.getIntent().getBooleanExtra(paramsName, false);
	}

	public static boolean getBundleValueByBoolean(Activity activity,
			String paramsName, boolean defaultValue) {
		return activity.getIntent().getBooleanExtra(paramsName, defaultValue);
	}

	/**
	 * 使用Intent根据包名打开对应的应用程序
	 * 
	 * @param context
	 *            上下文
	 * @param packagePath
	 *            应用包路径
	 * @param classNamePath
	 *            应用类全路径
	 */
	public static void intentToPkg(Context context, String packagePath,
			String className) {
		Intent intent = new Intent();
		intent.setClassName(packagePath, className);
		context.startActivity(intent);
	}

	/**
	 * 获取图片文件路径
	 * 
	 * <pre>
	 * 使用方法:
	 * 	1. 使用此方法(intentToImgBrowse)跳转图片浏览界面
	 * 	2. 在Activity中重写onActivityResult方法
	 * 	3. 将onActivityResult方法中返回的intentData数据传到此工具类中的getImgPathOfIntetData方法中
	 * 	4. 接收getImgPathOfIntetData返回的照片路径即可
	 * </pre>
	 * 
	 * @param activity
	 *            当前Activity
	 * @param requestCode
	 *            请求码
	 */
	public static void intentToImgBrowse(Activity activity, int requestCode) {
		Intent intent = new Intent();
		intent.setType("image/*");
		intent.setAction(Intent.ACTION_GET_CONTENT);
		activity.startActivityForResult(intent, requestCode);
	}

	/**
	 * 获取IntentData数据中的图片路径,需要结合工具类中的intentToImgBrowse方法使用
	 * 
	 * @param activity
	 *            当前Activity
	 * @param intentData
	 *            请求返回的数据
	 * @return String 图片路径
	 */
	public static String getImgPathOfIntetData(Activity activity,
			Intent intentData) {
		if (intentData != null) {
			Uri uri = intentData.getData();
			String[] proj = { MediaStore.Images.Media.DATA };
			Cursor query = activity.getContentResolver().query(uri, proj, null,
					null, null);
			int imageColumnIndex = query
					.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
			query.moveToFirst();
			return query.getString(imageColumnIndex);
		} else {
			return null;
		}
	}
}
